package com.woniuxy.service;

import com.github.pagehelper.PageInfo;
import com.woniuxy.entity.DTO.*;
import com.woniuxy.entity.GoodsCommit;
import com.woniuxy.entity.OrderStatus;
import com.woniuxy.entity.PaymentMethod;
import com.woniuxy.util.PageParam;
import com.woniuxy.util.ResponseData;
import org.apache.ibatis.annotations.Param;

import java.text.ParseException;
import java.util.List;

/**
 * @author ：admin
 * @version ：1.0
 * @date ：Created in 2025/5/13 10:29
 * @description ：TODO
 * @modified_by ：
 */
public interface OrderService {
    /**
     * <p>从前端页面获取当前页数 pageNum 、每页显示记录数 pageSize 以及查询参数 param ，此处 param 应当为 null 。</p>
     * <p>根据分页参数，查询所有订单信息。</p>
     * @param param 包含 pageNum 、 pageSize 、 param 的参数， param 的泛型为订单类 OrderDTO 。
     * @return 包含查询结果及分页信息的 PageInfo 对象。
     */
    PageInfo<OrderDTO> queryOrderListByPage(PageParam<OrderDTO> param);

    /**
     * <p>查询所有订单状态。</p>
     * @return 订单状态列表
     */
    List<OrderStatus> queryStatusList();

    /**
     * <p>查询所有支付方式。</p>
     * @return 支付方式列表
     */
    List<PaymentMethod> queryPaymentMethodList();

    /**
     * <p>根据条件分页查询订单信息。</p>
     * @param param 分页查询的条件参数
     * @return 包含查询结果和分页信息的 pageInfo 对象
     */
    PageInfo<OrderDTO> queryOrderByCondition(PageParam<OrderDTO> param);
    /**
     **********************用户端操作**************************************************************
     */
    /**
     * 根据状态index查找用户端订单信息
     */
    List<OrderUserDTO> queryOrderByStatus(Integer index) throws ParseException;
    /**
     * <p>根据订单编号删除订单信息。</p>
     * @param orderId 订单编号
     * @return 删除结果
     */
void deleteUserOrder(@Param("orderId") String orderId) throws ParseException;
/**
 * 根据orderId查询订单信息和地址信息
 */
OrderItemAndAddressDTO  queryOrderItemAndAddressByOrderId(String orderId);

    /**
     ************************************************************************************
     */

    /**
     * <p>根据订单编号查询订单详情信息。</p>
     * @param orderId 订单编号
     * @return 订单详情
     */

    OrderDTO queryOrderItemByOrderId(String orderId);

    /**
     * <p>根据被选中的商品生成订单。</p>
     * @param addOrderParamDTOs 被选中的商品
     */
    void addOrderFromCart(List<AddOrderParamDTO> addOrderParamDTOs) throws InterruptedException, ParseException;

    /**
     * <p>提交订单</p>
     *
     * @param submitOrderDTO
     * @return
     */
    String submitOrder(SubmitOrderDTO submitOrderDTO) throws ParseException;

    /**
     * <p>支付</p>
     *
     * @param orderId
     * @return
     */
    ResponseData<?> pay(String orderId) throws ParseException;
    /**
     *查找图片
     */
    List<GoodsImageSrcDTO> queryImgSrc(String orderId);
    /**
     * 添加评价
     */
    ResponseData addComment(CommitdDTO commitdDTO) throws ParseException;

    /**
     * <p>立即购买对应的添加订单</p>
     * @param goodsId
     */
    String addOrderForCommonGoods(Integer goodsId) throws ParseException, InterruptedException;
}
